package net.zoneland.geological.station.service;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import net.zoneland.geological.station.dao.Tbl_station_infoDao;
import net.zoneland.geological.station.dao.Tbl_station_warn_configDao;
import net.zoneland.geological.station.dao.Tbl_station_warnoptionDao;
import net.zoneland.geological.station.entity.Tbl_station_info;
import net.zoneland.geological.station.entity.Tbl_station_warn_config;
import net.zoneland.geological.station.entity.Tbl_station_warnoption;

/**
 * tbl_station_warn_config[设备预警方案设置表]表操作Serfice实现类

 * 表   名：TBL_STATION_WARN_CONFIGSERVICEIMPL<br/>
 * 注   释：设备预警方案设置表<br/>
 * 作   者：李义<br/>
 * 日   期：2017-06-19 19:52:19
**/
@Service("tbl_station_warn_configService")
public class Tbl_station_warn_configServiceImpl implements Tbl_station_warn_configServiceI { 

	public static Logger logger = Logger.getLogger(Tbl_station_warn_configServiceImpl.class);

	/**
	 * 自动注入DAO对象
	**/
	@Autowired
	private Tbl_station_infoDao tbl_station_infoDao;
	
	@Autowired
	private Tbl_station_warnoptionDao tbl_station_warnoptionDao;
	
	@Autowired
	private Tbl_station_warn_configDao tbl_station_warn_configDao;

	/**
	 * 新增或者更新数据方法接口
	**/
	@Override
	public Tbl_station_warn_config addOrUpdate( Tbl_station_warn_config tbl_station_warn_config )  throws Exception{
		if ( tbl_station_warn_config == null ) {
			logger.error(Tbl_station_warn_config.class.getName() + "对象参数信息为NULL，addOrUpdate方法无法继续！");
			return tbl_station_warn_config;
		}
		Map<String, Object> map = new HashMap<String, Object>();
		if( tbl_station_warn_config.getId() ==null || "".equals( tbl_station_warn_config.getId().trim() ) ){
			map.put( "id", "0000-0000-0000-0000" );
		}else{
			map.put( "id", tbl_station_warn_config.getId() );
		}
		List<Tbl_station_warn_config> list  = tbl_station_warn_configDao.getList(map);
		if( list != null && !list.isEmpty() ){
			if( tbl_station_warn_config.getCreate_time() == null ){
				tbl_station_warn_config.setCreate_time( new Date() );
			}
			if( tbl_station_warn_config.getUpdate_time() == null ){
				tbl_station_warn_config.setUpdate_time( new Date() );
			}
			tbl_station_warn_configDao.edit( tbl_station_warn_config );
			return tbl_station_warn_config;
		}else{
			if( tbl_station_warn_config.getId() ==null || tbl_station_warn_config.getId().trim().isEmpty() ){
				tbl_station_warn_config.setId( UUID.randomUUID() + "" );
		    }
			if( tbl_station_warn_config.getCreate_time() == null ){
				tbl_station_warn_config.setCreate_time( new Date() );
			}
			if( tbl_station_warn_config.getUpdate_time() == null ){
				tbl_station_warn_config.setUpdate_time( new Date() );
			}
			tbl_station_warn_configDao.add( tbl_station_warn_config );
			return tbl_station_warn_config;
		}
	}
	/**
	 * 新增数据方法实现
	**/
	@Override
	public boolean add(Tbl_station_warn_config tbl_station_warn_config) throws Exception{
		tbl_station_warn_configDao.add( tbl_station_warn_config );
		return true;
	}
	/**
	 * 更新数据方法实现
	**/
	@Override
	public boolean update(Tbl_station_warn_config tbl_station_warn_config) throws Exception{
		tbl_station_warn_configDao.edit( tbl_station_warn_config );
		return true;
	}
	/**
	 * 查询数据方法实现
	**/
	@Override
	public Tbl_station_warn_config get( Map<String, Object> map ) throws Exception{
		return tbl_station_warn_configDao.get( map );
	}
	/**
	 * 查询数据方法实现（列表）
	**/
	@Override
	public List<Tbl_station_warn_config> getList(Map<String, Object> map) throws Exception{ 
		return tbl_station_warn_configDao.getList( map );
	}
	
	/**
	 * 查询数据总数方法实现
	**/
	@Override
	public int getListCount(Map<String, Object> map) throws Exception{ 
		return tbl_station_warn_configDao.getListCount( map );
	}
	
	/**
	 * 数据删除方法实现
	**/
	@Override
	public boolean delete(Map<String, Object> map) throws Exception{ 
		tbl_station_warn_configDao.delete( map );
		return true;
	}
	
	@Override
	public void checkConfig( String station_id ) {
		/*
		Map<String, Object> paramMap = new HashMap<>();
		Tbl_station_info tbl_station_info = null;
		//看看该设备是否存在，如果不存在，那么应该是已经被删除了
		paramMap.put( "station_id", station_id );
		tbl_station_info = tbl_station_infoDao.get( paramMap );
		if( tbl_station_info == null ){
			//设备已经被删除，删除该设备的所有预警荐配置以及预警参数配置
			paramMap.clear();
			paramMap.put( "deviceid" , station_id );
			tbl_station_warnoptionDao.delete( paramMap );
			tbl_station_warn_configDao.delete( paramMap );
		}else{
			List<Tbl_station_warnoption> station_warnoption_list = null;
			List<Tbl_station_warn_config> station_warn_config_list = null;
			Tbl_station_warn_config tbl_station_warn_config = null;
			Boolean configExists = false;
			//设备存在，依据该设备的所有预警项，对设备预警参数进行检查，进行补齐，删除操作
			paramMap.clear();
			paramMap.put( "deviceid" , station_id );
			station_warnoption_list = tbl_station_warnoptionDao.getList( paramMap );
			station_warn_config_list = tbl_station_warn_configDao.getList( paramMap );
			
			//先预设这些配置全部都是多余的，需要删除的，然后把需要的留下来
			if( station_warn_config_list != null && !station_warn_config_list.isEmpty() ){
				for( Tbl_station_warn_config config : station_warn_config_list ){
					config.setDeleted( 1 );
				}
			}
			
			if( station_warnoption_list != null && !station_warnoption_list.isEmpty() ){
				//进行预警参数核对
				for( Tbl_station_warnoption option : station_warnoption_list ){
					//检查蓝色预警
					configExists = false;
					if( station_warn_config_list != null && !station_warn_config_list.isEmpty() ){
						for( Tbl_station_warn_config config : station_warn_config_list ){
							if( option.getDeviceid().equalsIgnoreCase( config.getDeviceid() ) &&
								option.getId().equalsIgnoreCase( config.getOption_id() ) &&
								"蓝色".equals( config.getWarn_level() )
							){
								configExists = true;
								config.setDeleted(0);
								break;
							}
						}
					}
					if( !configExists ){
						//配置不存在，需要补齐一个
						tbl_station_warn_config = new Tbl_station_warn_config();
						tbl_station_warn_config.setDeviceid( option.getDeviceid() );
						tbl_station_warn_config.setOption_id( option.getId() );
						tbl_station_warn_config.setWarn_level( "蓝色" );
						tbl_station_warn_config.setOption_name( option.getOptionname() );
						tbl_station_warn_config.setCreate_time( new Date() );
						tbl_station_warn_config.setUpdate_time( new Date() );
						tbl_station_warn_configDao.add(tbl_station_warn_config);
					}
					//检查黄色预警
					configExists = false;
					if( station_warn_config_list != null && !station_warn_config_list.isEmpty() ){
						for( Tbl_station_warn_config config : station_warn_config_list ){
							if( option.getDeviceid().equalsIgnoreCase( config.getDeviceid() ) &&
								option.getId().equalsIgnoreCase( config.getOption_id() ) &&
								"黄色".equals( config.getWarn_level() )
							){
								configExists = true;
								config.setDeleted(0);
								break;
							}
						}
					}
					if( !configExists ){
						//配置不存在，需要补齐一个
						tbl_station_warn_config = new Tbl_station_warn_config();
						tbl_station_warn_config.setDeviceid( option.getDeviceid() );
						tbl_station_warn_config.setOption_id( option.getId() );
						tbl_station_warn_config.setWarn_level( "黄色" );
						tbl_station_warn_config.setOption_name( option.getOptionname() );
						tbl_station_warn_config.setCreate_time( new Date() );
						tbl_station_warn_config.setUpdate_time( new Date() );
						tbl_station_warn_configDao.add(tbl_station_warn_config);
					}
					//检查红色预警
					configExists = false;
					if( station_warn_config_list != null && !station_warn_config_list.isEmpty() ){
						for( Tbl_station_warn_config config : station_warn_config_list ){
							if( option.getDeviceid().equalsIgnoreCase( config.getDeviceid() ) &&
								option.getId().equalsIgnoreCase( config.getOption_id() ) &&
								"红色".equals( config.getWarn_level() )
							){
								configExists = true;
								config.setDeleted(0);
								break;
							}
						}
					}
					if( !configExists ){
						//配置不存在，需要补齐一个
						tbl_station_warn_config = new Tbl_station_warn_config();
						tbl_station_warn_config.setDeviceid( option.getDeviceid() );
						tbl_station_warn_config.setOption_id( option.getId() );
						tbl_station_warn_config.setWarn_level( "红色" );
						tbl_station_warn_config.setOption_name( option.getOptionname() );
						tbl_station_warn_config.setCreate_time( new Date() );
						tbl_station_warn_config.setUpdate_time( new Date() );
						tbl_station_warn_configDao.add(tbl_station_warn_config);
					}
				}
			}
			if( station_warn_config_list != null && !station_warn_config_list.isEmpty() ){
				for( Tbl_station_warn_config config : station_warn_config_list ){
					if( config.getDeleted() == 1 ){
						paramMap.clear();
						paramMap.put( "id" , config.getId() );
						tbl_station_warn_configDao.delete( paramMap );
					}
				}
			}
		}
		*/
	}
	
}
